package br.com.vendaext.gerencial.apresentacao;

import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.inject.Named;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import org.springframework.web.jsf.FacesContextUtils;

import br.com.vendaext.gerencial.entidades.Usuario;
import br.com.vendaext.gerencial.integracao.UsuarioDAO;

@Named
@Component
@Scope("session")
public class LoginHome extends GenericHome<Usuario> {

	Usuario usuario = new Usuario();

	@Autowired
	MenuHome menu;

	UsuarioDAO dao;

	public String login() {
		FacesContext context = FacesContext.getCurrentInstance();
		if (context.getExternalContext().getSessionMap().get("usuarioLogado") != null)
			return "login.ok";

		Usuario usuarioLogado = dao.login(usuario);
		if (usuarioLogado != null) {
			context = FacesContext.getCurrentInstance();
			context.getExternalContext().getSessionMap().put("usuarioLogado", usuarioLogado);
			menu.carregarMenu();
			return "login.ok";
		} else {
			context = FacesContext.getCurrentInstance();
			context.addMessage(null, new FacesMessage("Usuário não cadastrado"));
			return "login.falhou";
		}
	}

	public String logout() {
		FacesContext context = FacesContext.getCurrentInstance();
		context.getExternalContext().getSessionMap().put("usuarioLogado", null);
		((HttpSession) context.getExternalContext().getSession(false)).invalidate();
//		FacesContext.getCurrentInstance().getExternalContext().getSessionMap().clear();
		System.out.println(FacesContextUtils.getWebApplicationContext(context).getBeanDefinitionNames());
		System.out.println(FacesContext.getCurrentInstance().getExternalContext().getSessionMap());
		return "logout.ok";
	}

	public Usuario getUsuario() {
		return usuario;
	}

	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}

	public UsuarioDAO getDao() {
		return dao;
	}

	@Autowired
	public void setDao(UsuarioDAO dao) {
		this.dao = dao;
	}

	@Override
	public void limparTela() {
		// TODO Auto-generated method stub

	}

	@Override
	public void checaRestricoes() {
		// TODO Auto-generated method stub

	}
}
